// 示例 1：
// 输入：s = "ababcbacadefegdehijhklij"
// 输出：[9, 7, 8]
// 解释：
// 划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。
// 每个字母最多出现在一个片段中。
// 像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的，因为划分的片段数较少。
// 示例 2：

// 输入：s = "eccbbbbdec"
// 输出：[10]

s = "ababcbacadefegdehijhklij"

var partitionLabels = function (s) {
    let obj = {}
    for (let str of s) {
        if (!obj[str]) {
            obj[str] = [s.indexOf(str), s.lastIndexOf(str)] // 使用哈希表收集每个字母的第一次出现位置和最后一次出现位置
        }
    }
    let arr = Object.values(obj)
    arr.sort((a, b) => a[0] - b[0]) // 和合并区间一样的写法
    let arr1 = [arr[0]]
    for (let i = 1; i < arr.length; i++) {
        let now = arr[i]
        let pre = arr1[arr1.length - 1]
        if (now[0] <= pre[1]) {
            pre[1] = Math.max(pre[1], now[1])
        } else {
            arr1.push(arr[i])
        }
    }
    return arr1.map(item => {
        return item[1] - item[0] + 1
    })
};

console.log(partitionLabels(s));
